package com.own.component.store.core.confirm.aop;

import com.own.component.store.core.constant.ConstantConfirmCommon;
import org.springframework.core.annotation.Order;

import java.lang.annotation.*;

/**
 * ConfirmAop
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
@Target({ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Order(0)
public @interface ConfirmAop {

    /**
     * 错误码
     *
     * @return 错误码
     */
    String code() default ConstantConfirmCommon.DEFAULT_CODE;

    /**
     * 是否需要二次确认
     *
     * @return boolean
     */
    boolean value() default ConstantConfirmCommon.DEFAULT_VALUE;

    /**
     * 模块名称
     *
     * @return String
     */
    String module() default ConstantConfirmCommon.DEFAULT_MODULE;

    /**
     * 确认的key值
     *
     * @return String
     */
    String key() default ConstantConfirmCommon.DEFAULT_KEY;

    /**
     * 是否需要二次确认的提示文字
     *
     * @return String
     */
    String message() default ConstantConfirmCommon.DEFAULT_MESSAGE;

    /**
     * 超时时间
     *
     * @return 超时时间
     */
    long expire() default ConstantConfirmCommon.DEFAULT_EXPIRE;

    /**
     * 是否允许强制执行
     *
     * @return 是否允许强制执行
     */
    boolean enforce() default ConstantConfirmCommon.DEFAULT_ENFORCE;

    /**
     * 强制执行的value值
     *
     * @return 强制执行的value值
     */
    String enforceValue() default ConstantConfirmCommon.DEFAULT_ENFORCE_VALUE;

    /**
     * 是否跳过aop的确认（只在切面中生效）
     *
     * @return 是否跳过
     */
    boolean skip() default false;

    /**
     * 跳过的key
     *
     * @return 是否跳过
     */
    String skipValue() default ConstantConfirmCommon.DEFAULT_KEY;

}
